package ProducerConsumer;

/**仓库类，里面有一个content变量，用于保存一个int型数据
 * 一个put(int value)方法，用于把value数据放到仓库的content中
 * 一个get（）方法，用于读取content中的值
 * @author Administrator
 *
 */
public class Warehouse {
    private int content;//保存数据的变量
    private boolean available=false;//默认标志为false,即没有数据
    public synchronized int get() {
        while (available == false) {//如果没有数据
            try {
                wait();//不能取数据，等待并释放锁
            } catch (InterruptedException e) {}
        }
        //如果有数据则可以取数据，并把数据表值设为false，表示数据被取走
        available=false;
        notifyAll();//通知放数据的线程，可以放数据了
        return content;
    }
    public synchronized void put(int value){
        while(available==true){
            try{
                wait();//不能放入，等待并释放锁
            }catch(InterruptedException e){}
    }
        //仓库中没有数据了，则把value放入
        content=value;
        available=true;
        notifyAll();//通知取数据的线程，可以取数据了
         }
}
